from django.shortcuts import render
from django.core.urlresolvers import reverse
from django.http import HttpResponse
# 密码加密模块
from django.contrib.auth.hashers import make_password,check_password
# 引入 setting 里 自动获取的 项目路径
from web.settings import BASE_DIR
# 引入模板
from ..models import Users
#  引入定义的 文件上传函数
from . IndexViews import uploads
from django.contrib.auth.decorators import permission_required
import os
# 显示添加页面
@permission_required('myadmin.insert_users',raise_exception = True)
def user_add(request):
    return render(request,'admin/users/add.html')

# 添加用户
@permission_required('myadmin.insert_users',raise_exception = True)
def user_insert(request):
    try:
        # 获取用户提交的数据
        data = request.POST.dict()
        # print(data)
        # 弹出 csrf
        data.pop('csrfmiddlewaretoken')
        # 密码加密
        data['password'] = make_password(data['password'],None,'pbkdf2_sha256')
        # 获取上传的文件名 如果没上传返回None
        myfile = request.FILES.get('pic',None)
        # print(myfile)
        # 判断是否上传文件
        if myfile:
            # 如果有上传就调用文件上传函数
            data['pic'] = uploads(myfile)
        else:
            #  如果没有上传就设置为默认路径
            data['pic'] = "/static/pics/user.jpg"

        # print(data)
        #创建用户 并添加数据
        Users.objects.create(**data)

        return render(request, 'info.html', {'msg': '添加成功', 'url': reverse('admin_user_list')})
    except:
        return render(request, 'info.html', {'msg': '添加失败', 'url': reverse('admin_user_add')})
# 显示用户列表
@permission_required('myadmin.show_users',raise_exception = True)
def user_list(request):
    # 获取数据库的会员数据   exclude 筛选（status状态为2的不查询）
    data = Users.objects.exclude(status=2)

# 搜索
    #  获取 搜索条件 参数
    types = request.GET.get('types',None)
    keywords = request.GET.get('keywords',None)
    # 判断是否有搜索条件
    if types:
        # 判断是否是全字段查询
        if types == 'all':
            # 进行多字段查询  or 查询
            # 导入 Q 对象 可进行 or 复杂查询 __contains 模糊查询
            from django.db.models import Q
            # 查询
            data = data.filter(Q(username__contains=keywords)|Q(phone__contains=keywords)|Q(age__contains=keywords)|Q(email__contains=keywords))
        else:
            #  拼接搜索条件
            dic = {types+'__contains':keywords}
            #  搜索查询
            data = data.filter(**dic)
# 数据分页  导入分页模块
    from django.core.paginator import Paginator
    # 实例化分页对象  参数1：数据列表   参数2：每页显示的条数
    p = Paginator(data,10)
    # 获取当前的页码数 有传页码数显示页码  没有显示 1
    page = request.GET.get('page',1)
    # 获取当前页的数据
    datalist = p.page(page)
    # 获取所有的页码数列表
    pages = p.page_range

    # 分配数据
    context = {'data':datalist}
    return render(request,'admin/users/list.html',context)

# 删除用户
@permission_required('myadmin.del_users',raise_exception = True)
def user_del(request):
    try:
        # 获取用户传来的 id
        id = request.GET.get('uid')
        # 获取用户对象
        ob = Users.objects.get(id=id)
        # 更改状态信息  逻辑删除  不删除数据
        ob.status = 2
        ob.save()
        return render(request,'info.html',{'msg':'删除成功','url':reverse('admin_user_list')})
    except:
        return render(request, 'info.html', {'msg': '删除失败', 'url': reverse('admin_user_list')})
# 修改用户信息
@permission_required('myadmin.edit_users',raise_exception = True)
def user_uppage(request,uid):
    # 获取用户对象数据
    data = Users.objects.get(id=uid)
    # 分配数据
    context = {'data':data}
    # print(context)
    return render(request,'admin/users/uppage.html',context)

# 更新数据
@permission_required('myadmin.edit_users',raise_exception = True)
def user_upinsert(request):
    # 获取数据
    # data = request.POST.dict()
    # print(data)
    try:
        # 获取用户对象
        ob = Users.objects.get(id=request.POST['uid'])
        #  更改数据
        ob.username = request.POST['username']
        ob.phone = request.POST['phone']
        ob.email = request.POST['email']
        ob.age = request.POST['age']
        ob.sex = request.POST['sex']

        # 获取文件名
        myfile = request.FILES.get('pic',None)
        # 判断是否上传了文件
        if myfile:
            #判断是否不是默认图片
            if ob.pic != '/static/pics/user.jpg' and ob.pic != '':
                # 删除原来的头像
                os.remove(BASE_DIR+ob.pic)
                # 调用文件上传方法
            ob.pic = uploads(myfile)
        #     执行更新
        ob.save()
        return render(request, 'info.html', {'msg': '修改成功', 'url': reverse('admin_user_list')})
    except:
        return render(request,'info.html',{'msg':'修改成功','url':reverse('admin_user_uppage')})
